<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>call/apply 函数实现</title>
</head>

<body>
  <p>call/apply 实现</p>
  <ul>
    <li>将函数引用到对象里</li>
    <li>调用函数</li>
    <li>删除对象里的函数</li>
  </ul>
  <script>
    // // 第一版
    // Function.prototype.call1 = function (context) {
    //   context.fn = this // this 指向实例
    //   context.fn()
    //   delete context.fn
    // }
    // // call 调用示范 1：
    // const obj = {
    //   value: 'muyy',
    // }
    // function testCall() {
    //   console.log(this.value) // muyy
    // }
    // const resultCall = testCall.call1(obj)

    // 第二版
    Function.prototype.call2 = function (context) {
      const arr = Array.prototype.slice.call(arguments, 1)

      context.fn = this // this 指向实例
      context.fn(...arr)
      delete context.fn
    }
    // call 调用示范 2：
    const obj2 = {
      value: 'muyy',
    }
    function testCall2(age) {
      console.log(this.value, age) // muyy 23
    }
    const resultCall = testCall2.call2(obj2, 23)


  </script>
</body>

</html>